import org.junit.Test;

import java.util.Arrays;

/**
 * 数组  Array
 * 数组相当于一堆相同数据类型的数据
 */
public class 数组 {
   //1.数组定义：4种 创建数组初始化【静态初始化：给定值  动态初始化：不给定制
    @Test
    public  void  testArray(){
        //注意：数组定义长度，不能改变
        int[] arr1=new int[4]; //Java推荐使用写法  动态初始化
        int arr2[]=new int[4]; //C推荐写法 java推荐动态初始化
        int[] arr3={1,2,3};  //静态初始化数组 元素可以直接使用
        int[] arr4=new int[]{1,2,3}; //动态初始化
        //数组：内部存数据叫做元素。
        //从arr3取出2的元素   数组名[下标]
        System.out.println(arr3[1]);
        //从arr3的长度
        System.out.println(arr3.length);
        //从arr4获取到第四个元素值      数组下标越界异常
        //System.out.println(arr4[4]);  //报错

    }
    /**
     * 数组的迭代（遍历：输出数组的所有的元素值）三种
     * 1.普通迭代方式：for
     * 2.增强for方式：推荐 JDK1.5之后
     * 3.工具类：Arrays
     *
     */
    @Test
    public void testIterate(){
        int [] arr={1,2,3,7}; //静态初始化数组  数组名[下标]
 //       for (int i=0;i<arr.length;i++){ //拿数组下标
   //         System.out.println(arr[i]);
    //    }

        //增强for jdk1.5  遍历数组目的：拿元素值
    //    for (int t:arr){ //增强for语法;(遍历数据类型  引用：数组名)
        //    System.out.println(t);
       // }

        //工具类 ：Arrays.toString（）直接打印数组元素值
        System.out.println(Arrays.toString(arr));
    }

    /**
     *数组的扩容： 数组的长度是固定，不可改变【扩容改变数组长度】
     */
    @Test
    public void testCopy(){
        //字符数组数组长度固定：2个
        char[] arr={'唐','山'}; //想法：长度增加为4
        //扩容：增加4个   克隆新的数组
        char[] temp= Arrays.copyOf(arr,4);
        arr=temp;
        arr[2]='工';
        arr[3]='业';
        System.out.println(arr);
        //需求：输出唐山工业

    }
    /**
     * 数组输出元素时，会有一些不同  【查看数据是否是的数组】
     * 数据类型：基础数据类型+引用类型
     *
     */
    @Test
    public void testArrays(){
        //字符数组
        char[] china={'中','国'};
        System.out.println(china);  //输出：中国  字符串：字符数组
        //输出语句--JavaOOP面向对象：  重载，字符数组自动拼接
        //数值数组
        int[] i={1,2};
        System.out.println(i); //输出：[  I数据类型 @连接符 3d82c5f3地址值
    }
    /**
     * 冒泡排序：双层for循环的使用：外层for执行一次 内层for执行全部
     *
     */
    @Test
    public void bubbleSort(){
        //静态初始化数组
        int[] arr={3,6,4,1}; //升序输出 1 3 4 6
        //①外层for控制层  控制轮
        for(int i=0;i< arr.length-1;i++){
            //内层for控制次  j= 三轮递减【3-1】次
            for(int j=0;j< arr.length-1-i;j++){
                //③交换：第一个元素比第二个元素大，田间成立交换【升序】
                if (arr[j]>arr[j+1]){//【相邻元素】数组名【下标】
                    //③交换：创建第三方数组，接收  变量名：temp
                    int temp=arr[j]; //大的元素交给第三方变量保存
                    arr[j]=arr[j+1]; //第二个元素给第一个元素位置
                    arr[j+1]=temp; //保存第三方变量【大数】交给第二个元素
                }
            }

        }
        System.out.println(Arrays.toString(arr)); //输出数组
    }
    @Test
    public void testSort(){
        int[] arr={3,6,4,1};
        //工具类 Arrays.sort（）  方法排序 默认升序
        Arrays.sort(arr);
        System.out.println(Arrays.toString(arr));
    }

}
